#include"Qlist.h"

void QueueInit(Queue* q)
{
    assert(q);
    q->rear=q->front=NULL;
}
// 队尾入队列
void QueuePush(Queue* q, QDataType data)
{
    QNode*newnode=(QNode*)malloc(sizeof(QNode));
    newnode->data=data;
    if(QueueEmpty(q))
    {
        q->front=q->rear=newnode;
    }
    else
    {
        q->rear->next=newnode;
        q->rear=q->rear->next;
    }
}
// 队头出队列
void QueuePop(Queue* q)
{
    QNode*next =q->front->next;
    free(q->front);
    q->front=next;
}
// 获取队列头部元素
QDataType QueueFront(Queue* q)
{
    assert(!QueueEmpty(q));
    return q->front->data;
}
// 获取队列队尾元素
QDataType QueueBack(Queue* q)
{
    assert(!QueueEmpty(q));
    return q->rear->data;
}
// 获取队列中有效元素个数
int QueueSize(Queue* q)
{
    int count =0;
    QNode* cur=q->front;
    while(cur!=q->rear->next)
    {
        count++;
        cur= cur->next;
    }
    return count;
}
// 检测队列是否为空，如果为空返回非零结果，如果非空返回0
int QueueEmpty(Queue* q)
{
    return q->front==NULL&&q->rear==NULL&&q->front==q->rear;
}
// 销毁队列
void QueueDestroy(Queue* q)
{
    QNode*cur=q->front;
    while(cur!=q->rear->next)
    {
        QNode*next=cur->next;
        free(cur);
        cur=next;
    }
    q->front=NULL;
    q->rear=NULL;
}